package main

import (
	"go-todo-app/db"
	"go-todo-app/handler"
	"log"
	"net/http"

	"github.com/gorilla/mux"
	"github.com/rs/cors"
)

func main() {
	log.Println("start server")
	// 初始化 GORM + SQLite
	if err := db.InitGORM("todo.db"); err != nil {
		log.Fatal(err)
	}
	// 路由
	r := mux.NewRouter()
	r.HandleFunc("/api/todo", handler.CreateTodoHandler).Methods("POST")
	r.HandleFunc("/api/todos", handler.GetAllTodosHandler).Methods("GET")
	r.HandleFunc("/api/todo/{id}", handler.GetTodoByIDHandler).Methods("GET")
	// r.HandleFunc("/api/todo/{id:[0-9]+}", handler.GetTodoByIDHandler).Methods("GET")
	r.HandleFunc("/api/todo/{id:[0-9]+}", handler.UpdateTodoHandler).Methods("PUT")
	r.HandleFunc("/api/todo/{id:[0-9]+}", handler.DeleteTodoHandler).Methods("DELETE")

	http.Handle("/", r)
	// cors
	corsMiddleware := cors.New(cors.Options{
		AllowedOrigins:   []string{"*"},                                       // 允许所有来源（开发环境用，生产环境需指定）
		AllowedMethods:   []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, // 允许的 HTTP 方法
		AllowedHeaders:   []string{"Content-Type", "Authorization"},           // 允许的请求头（如 Content-Type 是 POST/PUT 传 JSON 必需的）
		ExposedHeaders:   []string{"Content-Length"},                          // 允许前端读取的响应头
		AllowCredentials: true,                                                // 是否允许携带 Cookie（需配合具体 AllowedOrigins，不能用 "*"）
	})
	handlerWithCORS := corsMiddleware.Handler(r)

	// mux := http.NewServeMux()
	// mux.HandleFunc("POST /api/todo", handler.CreateTodoHandler)
	// mux.HandleFunc("GET /api/todos", handler.GetAllTodosHandler)
	// mux.HandleFunc("/api/todo/{id}", handler.GetTodoByIDHandler)
	// server := &http.Server{
	// 	Handler: r,
	// 	Addr:    "127.0.0.1:8080",
	// }
	log.Println("服务器启动: http://localhost:8080")
	// log.Fatal(server.ListenAndServe())
	log.Fatal(http.ListenAndServe("127.0.0.1:8080", handlerWithCORS))
}
